import moment from "moment";

const dateUtils = {
  /**
   * 获取当前日期
   * @param format
   * @returns {string}
   */
  getCurrentDate(format) {
    return moment().format(format);
  },
  parse(dateString) {
    return moment(dateString, 'YYYY-MM-DD HH:mm:ss').toDate();
  },
  /**
   * 格式化品项
   * @param date  要格式化的日期
   * @param format  格式化模板
   * @returns {string}
   */
  format(date, format) {
    return moment(date).format(format);
  },
    // 获取上个月的第一天和最后一天
    getLastMonthDays () {
      let date = []
      let start = moment().subtract('month', 1).format('YYYY-MM') + '-01'
      let end = moment(start).subtract('month', -1).add('days', -1).format('YYYY-MM-DD')
      date.push(start)
      date.push(end)
      return date
  },
  formatDate: date => {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? "0" + m : m;
    var d = date.getDate();
    d = d < 10 ? "0" + d : d;
    return y + "-" + m + "-" + d;
  },
  formatDateYearMonth: date => {
    var y = date.getFullYear();
    var m = date.getMonth() + 1;
    m = m < 10 ? "0" + m : m;
    return y + "-" + m;
  },
  getDateList: (start, end) => {
    var startTime = new Date(moment(start).format("YYYY-MM-DD"));
    var endTime = new Date(moment(end).format("YYYY-MM-DD"));
    var date_all = [],
      i = 0;
    while (endTime.getTime() - startTime.getTime() >= 0) {
      var year = startTime.getFullYear();
      var month =
        (startTime.getMonth() + 1).toString().length == 1
          ? "0" + (startTime.getMonth() + 1).toString()
          : (startTime.getMonth() + 1).toString();
      var day =
        startTime.getDate().toString().length == 1
          ? "0" + startTime.getDate()
          : startTime.getDate();
      date_all[i] = year + "-" + month + "-" + day;
      startTime.setDate(startTime.getDate() + 1);
      i += 1;
    }
    return date_all;
  },
  getFirstDay: () => {
    //获取当前时间
    let date = new Date();

    //获取当前月的第一天
    date.setDate(1);

    let year = date.getFullYear();
    let month = date.getMonth();
    let day = date.getDate();

    return new Date(year, month, day);
  },
  getLastDay: () => {
    //获取当前时间
    let date = new Date();
    //获取当前月
    let currentMonth = date.getMonth();
    //获取到下一个月，++currentMonth表示本月+1，一元运算
    let nextMonth = ++currentMonth;
    //获取到下个月的第一天
    let nextMonthFirstDay = new Date(date.getFullYear(), nextMonth, 1);
    //一天时间的毫秒数
    let oneDay = 1000 * 60 * 60 * 24;
    //nextMonthFirstDay-oneDay表示下个月的第一天减一天时间的毫秒数就是本月的最后一天
    return new Date(moment(nextMonthFirstDay - oneDay).format("YYYY-MM-DD"));
  },
  /*转换为分钟，h:小时（整数，可负值），m:分钟（整数，0-59）*/
  toMinute: (h, m) => {
    let f = h > 0 ? 1 : -1;
    return (Math.abs(h) * 60 + m * 1) * f;
  },
  /*转换为小时数，time 参数格式为'hh：mm'*/
  getHour: time => {
    return time.substr(0, time.indexOf(":"));
  },
  getMinute: time => {
    return time.substr(time.indexOf(":") + 1, time.length);
  },
  getTimesByChar: str => {
    var index = str.indexOf("f"); // 字符出现的位置
    var num = 0; // 这个字符出现的次数
    while (index !== -1) {
      console.log(index); // 打印字符串出现的位置
      num++; // 每出现一次 次数加一
      index = str.indexOf("f", index + 1); // 从字符串出现的位置的下一位置开始继续查找
    }
    return num;
  },
  getDayTime: str => {
    let date = new Date();
    let times = date.getTime();
    let hour = date.getHours();
    let minute = date.getMinutes();
    let second = date.getSeconds();
    let dayTime =
      times - hour * 3600 * 1000 - minute * 60 * 1000 - second * 1000;
    return dayTime;
  },
  /*获取年月集合对象*/
  getYearMonthObj(num) {
    //num为从当前月到num个月之前的yyyy-MM格式字符串对象
    //获取当前时间
    let date = new Date();
    date.setDate(1);
    let returnData = [];
    returnData.push({
      value: moment(date).format("YYYY-MM"),
      text: moment(date).format("YYYY-MM")
    });
    //获取当前月
    for (var i = 1; i < num; i++) {
      date.setMonth(date.getMonth() - 1);
      returnData.push({
        value: moment(date).format("YYYY-MM"),
        text: moment(date).format("YYYY-MM")
      });
    }
    return returnData;
  },
  /*获取年月集合对象,当前月为原点*/
  getYearMonthObj2(num) {
    //num为从当前月到num个月之前的yyyy-MM格式字符串对象
    //获取当前时间
    let date = new Date();
    date.setDate(1);
    let returnData = [];

    date.setMonth(date.getMonth() + num+1);

    for (var i = num; i >= -num; i--) {
      date.setMonth(date.getMonth() - 1);
      returnData.push({
        value: moment(date).format("YYYY-MM"),
        text: moment(date).format("YYYY-MM")
      });
    }
    return returnData;
  },
  /*获取年份集合对象*/
  getYearObj(num) {
    //num为从当前月到num个月之前的yyyy-MM格式字符串对象
    //获取当前时间
    let date = new Date();
    date.setDate(1);
    let returnData = [];
    returnData.push({
      value: moment(date).format("YYYY"),
      text: moment(date).format("YYYY")
    });
    //获取当前月
    for (var i = 1; i < num; i++) {
      date.setMonth(date.getMonth() - 12);
      returnData.push({
        value: moment(date).format("YYYY"),
        text: moment(date).format("YYYY")
      });
    }
    return returnData;
  },
  //将分钟数转换为HH：MM
  toHourMinute(num) {
    let hmStr = "";
    if (num >= 0) {
      hmStr +=
        parseInt(num / 60) > 9 ? parseInt(num / 60) : "0" + parseInt(num / 60);
      hmStr += ":";
      hmStr += num % 60 > 9 ? num % 60 : "0" + (num % 60);
    }
    return hmStr;
  },
  //根据年月求第一天与最后一天
  getMonthFirstLastDay(yearMonth) {
    let year = yearMonth.split("-")[0];
    let month = yearMonth.split("-")[1];
    let firstDay = new Date(year, month - 1, 1); //这个月的第一天
    let currentMonth = firstDay.getMonth(); //取得月份数
    let nextMonthFirstDay = new Date(
      firstDay.getFullYear(),
      currentMonth + 1,
      1
    ); //加1获取下个月第一天
    let dis = nextMonthFirstDay.getTime() - 24 * 60 * 60 * 1000; //减去一天就是这个月的最后一天
    let lastDay = new Date(dis);
    firstDay = moment(firstDay).format("YYYY-MM-DD"); //格式化 //这个格式化方法要用你们自己的，也可以用本文已经贴出来的下面的Format
    lastDay = moment(lastDay).format("YYYY-MM-DD"); //格式化
    return [firstDay, lastDay];
  },

  getMinuteByDates(d1,d2){
    const date1=moment(d1);
    const date2=moment(d2);
    return date2.diff(date1,'minute');//计算相差的分钟数
  }
};

export default dateUtils;
